USE TEMPDB
GO

SP_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO

SP_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE

USE msdb
GO

EXEC SP_SEND_DBMAIL
	@PROFILE_NAME = 'Perfil de Correo',
	@RECIPIENTS = 'milton.zuniga@equifax.com.sv',
	@SUBJECT = 'PRUEBAS',
	@BODY = 'EJEMPLO DE ENVIO DE CORREOS DESDE SQL SERVER'

SELECT * FROM SYSMAIL_MAILITEMS
GO
SELECT * FROM SYSMAIL_LOG
GO

------------------------------------------------------------

CREATE DATABASE PGR_BROKER_FUENTE
GO

USE PGR_BROKER_FUENTE
GO

ALTER DATABASE PGR_BROKER_FUENTE SET ENABLE_BROKER
GO
ALTER DATABASE PGR_BROKER_FUENTE SET TRUSTWORTHY ON
GO

CREATE MESSAGE TYPE PGR_MENSAJE VALIDATION = NONE
GO

CREATE CONTRACT PGR_CONVENIO (PGR_MENSAJE SENT BY INITIATOR)
GO

CREATE QUEUE PGR_COLA_ENVIO
GO

CREATE SERVICE PGR_SERVICIO_ENVIO ON QUEUE PGR_COLA_ENVIO (PGR_CONVENIO)
GO

DECLARE @DIALOGO UNIQUEIDENTIFIER
DECLARE @MENSAJE VARCHAR(128)
BEGIN DIALOG CONVERSATION @DIALOGO
FROM SERVICE PGR_SERVICIO_ENVIO TO SERVICE 'PGR_SERVICIO_RECEPCION'
ON CONTRACT PGR_CONVENIO
WITH ENCRYPTION = OFF
SET @MENSAJE = 'ESTE ES UN MENSAJE DESDE LA BASE DE DATOS: ' + DB_NAME();
SEND ON CONVERSATION @DIALOGO MESSAGE TYPE PGR_MENSAJE (@MENSAJE)
SET @MENSAJE = 'INICIANDO MENSAJES';
SEND ON CONVERSATION @DIALOGO MESSAGE TYPE PGR_MENSAJE (@MENSAJE)
SET @MENSAJE = 'FIN DE MENSAJES';
SEND ON CONVERSATION @DIALOGO MESSAGE TYPE PGR_MENSAJE (@MENSAJE)
GO

------------------------------------------------------------

CREATE DATABASE PGR_BROKER_DESTINO
GO

USE PGR_BROKER_DESTINO
GO

ALTER DATABASE PGR_BROKER_DESTINO SET ENABLE_BROKER
GO
ALTER DATABASE PGR_BROKER_DESTINO SET TRUSTWORTHY ON
GO

CREATE MESSAGE TYPE PGR_MENSAJE VALIDATION = NONE
GO

CREATE CONTRACT PGR_CONVENIO (PGR_MENSAJE SENT BY INITIATOR)
GO

CREATE QUEUE PGR_COLA_RECEPCION
GO

CREATE SERVICE PGR_SERVICIO_RECEPCION ON QUEUE PGR_COLA_RECEPCION (PGR_CONVENIO)
GO

SELECT CONVERT(VARCHAR(MAX), MESSAGE_BODY) AS MENSAJE FROM PGR_COLA_RECEPCION
GO
RECEIVE TOP(1) CONVERT(VARCHAR(MAX), MESSAGE_BODY) AS MENSAJE FROM PGR_COLA_RECEPCION
GO
RECEIVE CONVERT(VARCHAR(MAX), MESSAGE_BODY) AS MENSAJE FROM PGR_COLA_RECEPCION
GO

------------------------------------------------------------

CREATE DATABASE PGR_TSQL
GO

USE PGR_TSQL
GO

/*
DROP TABLE DETALLE_SOCIOS
GO
*/

CREATE TABLE DETALLE_SOCIOS (
	ID_SOCIO		INT,
	PRIMER_NOMBRE	VARCHAR(50),
	PRIMER_APELLIDO	VARCHAR(50),
	FECHA_NACIMIENTO	DATE,
	DIRECCION		VARCHAR(200),
	CIUDAD		VARCHAR(50),
	ESTADO		VARCHAR(50),
	CORREO		VARCHAR(50),
	FECHA_INGRESO	DATE
)
GO

ALTER TABLE DETALLE_SOCIOS ADD DUI VARCHAR(9) CONSTRAINT UC_DUI UNIQUE
GO
ALTER TABLE DETALLE_SOCIOS ADD TELEFONO VARCHAR(10) DEFAULT('9999999999')
GO

SELECT * INTO TABLA_PRUEBA FROM DETALLE_SOCIOS
GO

DECLARE @CONTADOR INT
SET @CONTADOR = 1
SET DATEFORMAT YMD
DECLARE @D1 DATETIME = '1950-01-01'
DECLARE @D2 DATETIME = '1994-12-31'
DECLARE @D3 DATETIME
DECLARE @D4 DATETIME
DECLARE @CONT VARCHAR(4)
DECLARE @DUI VARCHAR(9)
WHILE (@CONTADOR <= 5000)
BEGIN
	SET @CONT = CAST(@CONTADOR AS VARCHAR)
	SET @D3 = DATEADD(DAY, (ABS(CHECKSUM(NEWID())) % (1 + DATEDIFF(DAY, @D1, @D2))), @D1)
	SET @D4 = DATEADD(DAY, (ABS(CHECKSUM(NEWID())) % (1 + DATEDIFF(DAY, @D2, GETDATE()))), @D1)
	SET @DUI = STUFF(@CONT, 1, 0, REPLICATE('0', 9 - LEN(@CONT)))
	INSERT INTO TABLA_PRUEBA (ID_SOCIO, PRIMER_NOMBRE, PRIMER_APELLIDO, FECHA_NACIMIENTO, DIRECCION, CIUDAD, ESTADO, CORREO, FECHA_INGRESO, DUI) VALUES (
		@CONTADOR,
		'NOMBRE ' + @CONT,
		'APELLIDO ' + @CONT,
		@D3,
		'DIRECCION ' + @CONT,
		'CIUDAD ' + @CONT,
		'ESTADO ' + @CONT,
		'correo' + @CONT + '@mail.com',
		@D4,
		@DUI
	)
	SET @CONTADOR = @CONTADOR + 1
END

/*
DELETE FROM TABLA_PRUEBA
GO
*/

SELECT * FROM TABLA_PRUEBA ORDER BY ID_SOCIO
GO

SET DATEFORMAT YMD
GO

UPDATE TABLA_PRUEBA SET TELEFONO = NULL
GO

DECLARE @START DATETIME = GETDATE()
DECLARE @ID INT, @TELEFONO VARCHAR(10)
DECLARE PGR_CURSOR CURSOR FOR SELECT ID_SOCIO FROM TABLA_PRUEBA
OPEN PGR_CURSOR
	FETCH PGR_CURSOR INTO @ID
	WHILE @@FETCH_STATUS = 0
	BEGIN
		SELECT @TELEFONO = '999999' + RIGHT(DUI, 4) FROM TABLA_PRUEBA WHERE ID_SOCIO = @ID
		UPDATE TABLA_PRUEBA SET TELEFONO = @TELEFONO WHERE ID_SOCIO = @ID
		FETCH NEXT FROM PGR_CURSOR INTO @ID
	END
CLOSE PGR_CURSOR
DEALLOCATE PGR_CURSOR
SELECT DATEDIFF(SS, @START, GETDATE()) AS TIEMPO_TRANSCURRIDO_SEG

UPDATE TABLA_PRUEBA SET TELEFONO = NULL
GO

DECLARE @START DATETIME = GETDATE()
DECLARE @TEMP_TABLE TABLE (ID_SOCIO INT, DUI VARCHAR(9))
INSERT INTO @TEMP_TABLE SELECT ID_SOCIO, DUI FROM TABLA_PRUEBA
UPDATE TABLA_PRUEBA
SET TELEFONO = (SELECT '999999' + RIGHT(T1.DUI, 4) FROM @TEMP_TABLE T1 WHERE TABLA_PRUEBA.ID_SOCIO = T1.ID_SOCIO)
WHERE TABLA_PRUEBA.ID_SOCIO IN (SELECT T2.ID_SOCIO FROM @TEMP_TABLE T2)
SELECT DATEDIFF(SS, @START, GETDATE()) AS TIEMPO_TRANSCURRIDO_SEG
